import java.util.Scanner;

public class TestDemo {
    /**
     * 1  A - > C                     1  2^1 - 1
     * 2  A - > B    A -> C  B -> C   3  2^2 - 1
     * 3  A - > C    A -> B  C -> B  A -> C  B -> A  B -> C  A -> C  7 2^3- 1
     * 4  2^4 - 1
     *
     * 2^64-1
     * 汉罗塔
     * @param args
     */

    public static void main15(String[] args) {
        hanoiTower(1,'A','B','C');
        System.out.println();
        hanoiTower(2,'A','B','C');
        System.out.println();
        hanoiTower(3,'A','B','C');
        System.out.println();
        hanoiTower(4,'A','B','C');
        System.out.println();
        hanoiTower(5,'A','B','C');
        System.out.println();
    }
    public static void move(char pos1,char pos2) {
        System.out.print(pos1 + " -> " + pos2 + " ");
    }
    public static void hanoiTower(int n,char pos1, char pos2, char pos3) {
        if(n == 1) {
            move(pos1,pos3);
        } else {
            hanoiTower(n-1,pos1,pos3,pos2);
            move(pos1,pos3);
            hanoiTower(n-1,pos2,pos1,pos3);
        }
    }
    public static void main14(String[] args) {
        System.out.println(11.3 %4);
/*        int a = 1;
        int b = 2;
        System.out.println(a / b);*/
// 结果为 0

//如要得到0.5,得把其中一个转为double
//        System.out.println((double)a / b);
    }
    /**
     * 递归求 N 的阶乘
     * @param args
     */
    public static void main13(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(func9(n));
    }
    public static int func9(int n) {
        if(n == 1) {
            return 1;
        }
        return n * func9(n - 1);
    }
    /**
     * 递归求 1 + 2 + 3 + ... + 10

     * @param args
     */
    public static void main12(String[] args) {
        int n = 10;
        System.out.println(func8(n));
    }
    public static int func8(int n) {
        if(n == 1) {
            return 1;
        }
        return n + func8(n - 1);
    }
    /**
     * 按顺序打印一个数字的每一位(例如 1234 打印出 1 2 3 4) （递归）
     * @param args
     */
    public static void main11(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        func7(num);
    }
    public static void func7(int n) {
        if(n > 10) {
            func7(n / 10);
        }
        System.out.println(n % 10);
    }
    /**
     * 写一个递归方法，输入一个非负整数，返回组成它的数字之和
     * @param args
     */
    public static void main10(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        System.out.println(func6(num));
    }
    public static int func6(int n) {
        if(n < 10) {
            return  n;
        }
        return func6(n/10) + n % 10;
    }
    public static int fib(int n) {
        if(n == 1) {
            return 1;
        }else if(n==2) {
            return 2;
        }
        return fib(n - 1) +fib(n - 2);
    }
    /**
     * 青蛙跳台阶问题
     * @param args
     */
    public static void main9(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(fib(n));
    }
    public static int sum(int a, int b) {
        return a + b;
    }
    public static double sum(double a,double b,double c) {
        return a + b + c;
    }
    /**
     * 在同一个类中,分别定义求两个整数的方法 和 三个小数之和的方法。 并执行代码，求出结果
     * @param args
     */
    public static void main8(String[] args) {
        int a = 10;
        int b = 20;
        double c = 1.2;
        double d = 1.1;
        double e = 7.7;
        System.out.println(sum(a, b));
        System.out.println(sum(c, d, e));
    }
    public static int max(int num1,int num2) {

        return (num1 > num2) ? num1 : num2;
    }
    public static double max(double num1,double num2) {

        return (num1 > num2) ? num1 : num2;
    }
    public static double max(double num1,int num2) {

        return (num1 > num2) ? num1 : (double) num2;
    }
    public static void main7(String[] args) {
        int a = 10;
        int b = 5;
        double c = 1.2;
        double d = 2.4;
        System.out.println(max(a, b));
        System.out.println(max(c, d));
        System.out.println(max(d, a));

    }
    public static int max3(int a,int b, int c) {
        int max1 = max2(a,b);
        int max = max2(max1,c);
        return max;
    }
    public static int max2(int a,int b) {
        return (a > b) ? a : b;
    }
    /**
     * 创建方法求两个数的最大值max2，随后再写一个求3个数的最大值的函数max3。
     *
     * ​ 要求：在max3这个函数中，调用max2函数，来实现3个数的最大值计算
     * @param args
     */
    public static void main6(String[] args) {
        int a = 1;
        int b = 2;
        int c = 3;
        System.out.println(max3(a, b, c));
    }
    public static void func5(int[] arr) {
        int len = arr.length;
        int i = 0;
        while (i < len) {
            if((arr[i] % 2) == 0) {

            }
        }
    }
    /**
     * 调整数组顺序使得奇数位于偶数之前。调整之后，不关心大小顺序。
     * @param args
     */
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9};
        func10(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);

        }
    }
    public static void func10(int[] arr) {
        int len = arr.length;
        for (int i = 0; i < len; i++) {
            if(arr[i]%2==0) {
                int tmp = arr[len - 1];
                arr[len -1] = arr[i];
                arr[i] = tmp;
                i--;
                len--;
            }
        }
    }
    /**
     * 求 N 的阶乘
     * @param args
     */
    public static void main4(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(func3(5));
    }
    public static int func3_1(int n) {
        int sum = 0;
        for (int i = 1; i <= n; i++) {
            sum += func3(i);
        }
        return sum;
    }
    public static int func3(int n) {
        if(n == 1) {
            return 1;
        }
        return func3(n-1) * n ;
    }
    /**
     * 求1！+2！+3！+4！+........+n!的和
     * @param args
     */
    public static void main3(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(func3_1(n));
    }
    public static int func2(int n) {
        if (n == 1 || n == 2) {
            return 1;
        } else {
            int num1 = 1;
            int num2 = 1;
            int num3 = 0;
            for (int i = 3; i <= n; i++) {
                num3 = num1 + num2;
                num1 = num2;
                num2 = num3;
            }
            return num3;
        }
    }
    /**
     * 求斐波那契数列的第n项。(迭代实现)
     * @param args
     */
    public static void main2(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        System.out.println(func2(n));
    }
    public static int func1(int[] arr) {
        int ret = 0;

        for (int i = 0; i < arr.length; i++) {
            ret ^= arr[i];
        }
        return ret;
    }
    /**
     * 有一组数据，只有一个数字是出现一次，其他是两次，请找出这个数字。
     * @param args
     */
    public static void main1(String[] args) {
        int[] arr={1,1,2,2,3,3,4,4,5};
        System.out.println(func1(arr));
/*        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();*/

    }
}
